package cn.lili.modules.goods.integration;

import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dto.GoodsOperationDTO;
import cn.lili.modules.goods.entity.dto.GoodsUpdateStatusDTO;
import cn.lili.modules.goods.entity.dto.ProxyGoodsOperationDTO;
import cn.lili.modules.goods.entity.vos.GoodsVO;
import cn.lili.modules.store.entity.dos.Store;
import cn.lili.modules.supplier.entity.dto.SupplierGoodsOperationDTO;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * 商品数据整合服务
 *
 * @author paulG
 * @since 2022/8/15
 **/
public interface GoodsIntegrationService {

    /**
     * 保存商品
     *
     * @param goodsOperationDTO 商品信息
     * @return 商品信息
     */
    void saveGoods(GoodsOperationDTO goodsOperationDTO);

    /**
     * 保存商品模板
     *
     * @param goodsOperationDTO 商品信息
     * @return 商品信息
     */
    void saveDraftGoods(GoodsOperationDTO goodsOperationDTO);

    /**
     * 更新商品
     *
     * @param goodsOperationDTO 商品信息
     * @return 商品信息
     */
    void updateGoods(GoodsOperationDTO goodsOperationDTO);

    /**
     * 更新商品
     *
     * @param goodsIds 商品信息
     * @param categoryPathIds 商品信息
     * @return 商品信息
     */
    void updateGoods(String goodsIds, String categoryPathIds);

    /**
     * 保存供应商商品
     *
     * @param supplierGoodsOperationDTO 供应商商品信息
     * @return 商品信息
     */
    void saveSupplierGoods(SupplierGoodsOperationDTO supplierGoodsOperationDTO);

    /**
     * 更新供应商商品
     *
     * @param supplierGoodsOperationDTO 供应商商品信息
     * @return 商品信息
     */
    void updateSupplierGoods(SupplierGoodsOperationDTO supplierGoodsOperationDTO);


    /**
     * 更新供应商商品分类
     */
    void updateSupplierGoodsCategory(String goodsIds,String categoryPath);

    /**
     * 更新商品状态
     *
     * @param params 更新商品状态参数
     * @return 是否更新成功
     */
    Boolean updateGoodsStatus(GoodsUpdateStatusDTO params);

    /**
     * 批量增加商品虚拟销量
     *
     * @param params 更新商品状态参数
     * @return 是否更新成功
     */
    Boolean updateSalesVolume(GoodsUpdateStatusDTO params);

    /**
     * 批量增加商品虚拟销量
     *
     * @param params 更新商品状态参数
     * @return 是否更新成功
     */
    Boolean updateEvaluateVolume(GoodsUpdateStatusDTO params);

    /**
     * 下架所有商家商品
     *
     * @param storeId 店铺ID
     */
    void underStoreGoods(String storeId);

    /**
     * 批量更新商品的店铺信息
     *
     * @param store 店铺信息
     */
    void updateStoreDetail(Store store);

    /**
     * 查询商品VO
     *
     * @param goodsId 商品id
     * @return 商品VO
     */
    GoodsVO getGoodsVO(String goodsId);

    /**
     * 更新SKU评价数量
     *
     * @param skuId SKUId
     */
    void updateGoodsSkuCommentNum(String skuId);

    /**
     * 获取商品sku详情
     *
     * @param goodsId 商品ID
     * @param skuId   skuID
     * @param distId  分销员Id
     * @return 商品sku详情
     */
    Map<String, Object> getGoodsSkuDetail(String goodsId, String skuId, String distId);


    /**
     * 删除商品
     *
     * @param goodsIds 商品ID
     * @return 操作结果
     */
    Boolean deleteGoods(List<String> goodsIds, String storeId);

    /**
     * 删除商品
     *
     * @param goodsIds 商品ID
     * @return 操作结果
     */
    Boolean deleteGoodsV2(List<String> goodsIds, String storeId);

    /**
     * 删除商品
     *
     * @param categoryId 分类ID
     * @param underReason 下架原因
     * @return 操作结果
     */
    Boolean downGoodsByCategoryId(String categoryId, String underReason);

    /**
     * 编辑代理商品
     *
     * @param proxyGoodsOperationDTO 代理商品信息
     */
    void editProxyGoods(ProxyGoodsOperationDTO proxyGoodsOperationDTO);


    /**
     * 获取代理商品
     * @param supplierGoodsId 供应商商品ID
     * @param supplierId 供应商
     * @return
     */
    List<Goods> getProxyGoodsList(String supplierId,String supplierGoodsId);


    void generateFullEs(Integer isGreenGoods);

    void sendGenerateGoods(List<String> goodIds);


    void sendGrabGoods(Goods goods);

    ResultMessage<Object> addCategoryPathSon(String ids, String categoryPathSon, String categoryPathSonName);

    void addSupplierCategoryPathSon(String ids, String categoryPathSon, String categoryPathSonName);

    ResultMessage<Object> updateIndexByStoreId(String storeId);

    @ApiOperation(value = "更新是否全返商品")
    boolean updateResultGoods(@RequestParam("goodsIds") List<String> goodsIds, @RequestParam("isResultGoods") Boolean isResultGoods);
}
